// import parseTime, formatTime and set to filter
export { parseTime, formatTime } from '@/utils'

/**
 * Show plural label if time is plural number
 * @param {number} time
 * @param {string} label
 * @return {string}
 */
function pluralize(time, label) {
  if (time === 1) {
    return time + label
  }
  return time + label + 's'
}

/**
 * @param {number} time
 */
export function timeAgo(time) {
  const between = Date.now() / 1000 - Number(time)
  if (between < 3600) {
    return pluralize(~~(between / 60), ' minute')
  } else if (between < 86400) {
    return pluralize(~~(between / 3600), ' hour')
  } else {
    return pluralize(~~(between / 86400), ' day')
  }
}

/**
 * Number formatting
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 */
export function numberFormatter(num, digits) {
  const si = [
    { value: 1E18, symbol: 'E' },
    { value: 1E15, symbol: 'P' },
    { value: 1E12, symbol: 'T' },
    { value: 1E9, symbol: 'G' },
    { value: 1E6, symbol: 'M' },
    { value: 1E3, symbol: 'k' }
  ]
  for (let i = 0; i < si.length; i++) {
    if (num >= si[i].value) {
      return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
    }
  }
  return num.toString()
}

/**
 * 10000 => "10,000"
 * @param {number} num
 */
export function toThousandFilter(num) {
  return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

/**
 * Upper case first char
 * @param {String} string
 */
export function uppercaseFirst(string) {
  return string.charAt(0).toUpperCase() + string.slice(1)
}

export function toRMB(currencyDigits) {
  // Constants:
  var MAXIMUM_NUMBER = 99999999999.99

  var CN_ZERO = '零'
  var CN_ONE = '壹'
  var CN_TWO = '贰'
  var CN_THREE = '叁'
  var CN_FOUR = '肆'
  var CN_FIVE = '伍'
  var CN_SIX = '陆'
  var CN_SEVEN = '柒'
  var CN_EIGHT = '捌'
  var CN_NINE = '玖'
  var CN_TEN = '拾'
  var CN_HUNDRED = '佰'
  var CN_THOUSAND = '仟'
  var CN_TEN_THOUSAND = '万'
  var CN_HUNDRED_MILLION = '亿'
  var CN_SYMBOL = ''
  var CN_DOLLAR = '元'
  var CN_TEN_CENT = '角'
  var CN_CENT = '分'
  var CN_INTEGER = '整'

  var integral
  var decimal
  var outputCharacters
  var parts
  var digits, radices, bigRadices, decimals
  var zeroCount
  var i, p, d
  var quotient, modulus

  currencyDigits = currencyDigits.toString()
  if (currencyDigits === '') {
    return ''
  }
  if (currencyDigits.match(/[^,.\d]/) != null) {
    return ''
  }
  if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) === null) {
    return ''
  }

  currencyDigits = currencyDigits.replace(/,/g, '')
  currencyDigits = currencyDigits.replace(/^0+/, '')

  if (Number(currencyDigits) > MAXIMUM_NUMBER) {
    return ''
  }

  parts = currencyDigits.split('.')
  if (parts.length > 1) {
    integral = parts[0]
    decimal = parts[1]

    decimal = decimal.substr(0, 2)
  } else {
    integral = parts[0]
    decimal = ''
  }

  digits = [CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE]
  radices = ['', CN_TEN, CN_HUNDRED, CN_THOUSAND]
  bigRadices = ['', CN_TEN_THOUSAND, CN_HUNDRED_MILLION]
  decimals = [CN_TEN_CENT, CN_CENT]

  outputCharacters = ''

  if (Number(integral) > 0) {
    zeroCount = 0
    for (i = 0; i < integral.length; i++) {
      p = integral.length - i - 1
      d = integral.substr(i, 1)
      quotient = p / 4
      modulus = p % 4
      if (d === '0') {
        zeroCount++
      } else {
        if (zeroCount > 0) {
          outputCharacters += digits[0]
        }
        zeroCount = 0
        outputCharacters += digits[Number(d)] + radices[modulus]
      }
      if (modulus === 0 && zeroCount < 4) {
        outputCharacters += bigRadices[quotient]
      }
    }
    outputCharacters += CN_DOLLAR
  }

  if (decimal !== '') {
    for (i = 0; i < decimal.length; i++) {
      d = decimal.substr(i, 1)
      if (d !== '0') {
        outputCharacters += digits[Number(d)] + decimals[i]
      }
    }
  }

  if (outputCharacters === '') {
    outputCharacters = CN_ZERO + CN_DOLLAR
  }
  if (decimal === '') {
    outputCharacters += CN_INTEGER
  }
  outputCharacters = CN_SYMBOL + outputCharacters
  return outputCharacters
}
